package com.gobang.common.exception;

/**
 * 自定义基础异常类
 * 作为所有业务异常的父类，提供统一的错误码和错误消息处理
 * 
 * @author System
 * @since 1.0.0
 */
public class BaseException extends RuntimeException {

    /**
     * 错误码
     */
    private final String code;

    /**
     * 错误消息
     */
    private final String message;

    /**
     * 构造函数 - 使用ErrorCode枚举
     *
     * @param errorCode 错误码枚举
     */
    public BaseException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.code = errorCode.getCode();
        this.message = errorCode.getMessage();
    }

    /**
     * 构造函数 - 使用ErrorCode枚举和自定义消息
     *
     * @param errorCode 错误码枚举
     * @param customMessage 自定义错误消息
     */
    public BaseException(ErrorCode errorCode, String customMessage) {
        super(customMessage);
        this.code = errorCode.getCode();
        this.message = customMessage;
    }

    /**
     * 构造函数 - 直接指定错误码和消息
     *
     * @param code 错误码
     * @param message 错误消息
     */
    public BaseException(String code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }

    /**
     * 构造函数 - 包含原因异常
     *
     * @param errorCode 错误码枚举
     * @param cause 原因异常
     */
    public BaseException(ErrorCode errorCode, Throwable cause) {
        super(errorCode.getMessage(), cause);
        this.code = errorCode.getCode();
        this.message = errorCode.getMessage();
    }

    public String getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
} 